package co.gov.medellin.sdep.sisdep.model.dao;

import java.sql.SQLException;
import java.util.List;

import co.gov.medellin.sdep.sisdep.common.SISDEPException;
import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentVO;
import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentValueVO;

public interface IValueObjectDAO {

	/**
	 * Obtiene el mapa que contiene los datos asociados a cada uno de los componentes genericos de BCOPO.
	 * Se modifica:
	 * antes: 	public HashMap getGenericComponents() throws DataAccessException;
	 * despues:		public List getGenericComponents() throws DataAccessException;
	 * @return HashMap Mapa con las listas de los componentes genericos y sus valores asociados.
	 * @throws SQLException
	 */
	List getGenericComponents();
	
	/**
	 * Metodo que permite obtener el listado de Tipos definidos en el sistema. Es posible
	 * buscar por parte del nombre del tipo. Para obternerlos todos se una el % en como
	 * valor del parametro de la consulta.
	 *  
	 * @author carlos.perez@consult-soft.com  03-02-2012
	 * @param genCompVO
	 * @return
	 * @throws SISDEPException
	 */
	List loadTypeMasterList(GenericComponentVO genCompVO);
	
	/**
	 * Metodo que permite la actualizacion de los datos un TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  06-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void updateTypeMasterList(GenericComponentVO genCompVO);

	/**
	 * Metodo que permite la insercion de los datos de un nuevo TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  06-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void saveTypeMasterList(GenericComponentVO genCompVO);

	/**
	 * Metodo que permite obtener el listado de Valores para un Tipo definido en el sistema. Es posible
	 * buscar por parte del nombre del valor tipo. Para obternerlos todos se una el % en como
	 * valor del parametro de la consulta.
	 *  
	 * @author carlos.perez@consult-soft.com  07-02-2012
	 * @param genCompVO
	 * @return
	 * @throws SISDEPException
	 */
	List loadTypeValueMasterList(GenericComponentValueVO gcvSearchVO);
	
	/**
	 * Metodo que permite la actualizacion de los datos un VALOR TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  07-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void updateTypeValueMasterList(GenericComponentValueVO gcvVO);

	/**
	 * Metodo que permite la insercion de los datos de un nuevo VALOR TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  07-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void saveTypeValueMasterList(GenericComponentValueVO gcvVO);	

	/**
	 * 
	 * Metodo que permite consultar un objeto Valor Tipo usando su ID.
	 * @author carlos.perez@consult-soft.com  18-04-2012 
	 * @param id
	 */
	GenericComponentVO findTypeByPrimaryKey(long idType);
	
	/**
	 * 
	 * Metodo que permite consultar un objeto Valor Tipo usando su ID.
	 * @author carlos.perez@consult-soft.com  18-04-2012 
	 * @param id
	 */
	GenericComponentValueVO findTypeValueByPrimaryKey(long idTypeValue);
	
	/**
	 * 
	 * Metodo que permite consultar un objeto Valor Tipo usando el Id del Tipo y su Codigo (en base de
	 * datos corresponde al Valor).
	 * 
	 * @author carlos.perez@consult-soft.com  
	 * @version 19-06-2012
	 * 
	 * @param idType
	 * @param typeValueCode
	 * 
	 */
	GenericComponentValueVO findTypeValueByCode(String idType, String typeValueCode);	
}
